package modele;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import modele.case_.Case;
import modele.pion.Pion;
import outils.ImageOutils;
import outils.gestionnairefichier.GestionnaireImage;
import vue.Camera;

/**
 *
 * @author gervaila
 */
public class Drapeau implements Dessinable {

	private int numeroJoueur;
	private Case maCase;
	private Pion pion;
	private BufferedImage imageCase;
	private BufferedImage imagePion;

	/**
	 * Crée un Drapeau appartenant au joueur représenté par 'numeroJoueur'
	 *
	 * @param numeroJoueur
	 */
	public Drapeau(int numeroJoueur) {
		this.numeroJoueur = numeroJoueur;
		GestionnaireImage gi = GestionnaireImage.getInstance();
		Color couleur = Joueur.getCouleur(numeroJoueur);
		imageCase = ImageOutils.dessinerContour(gi.get("src/donnees/images/Drapeau.png"), couleur, 2);
		imagePion = ImageOutils.dessinerContour(gi.get("src/donnees/images/PetitDrapeau.png"), couleur, 2);
	}

	@Override
	public String toString() {
		return "Drapeau " + numeroJoueur;
	}

	/**
	 *
	 * @return la case sur laquelle est positionné le drapeau
	 */
	public Case getCase() {
		return maCase;
	}

	/**
	 * Défini comme case du drapeau 'maCase'
	 *
	 * @param maCase
	 */
	public void setCase(Case maCase) {
		this.maCase = maCase;
	}

	/**
	 *
	 * @return le pion qui porte le drapeau
	 */
	public Pion getPion() {
		return pion;
	}

	/**
	 * Défini le pion portant le drapeai par 'pion'
	 *
	 * @param pion
	 */
	public void setPion(Pion pion) {
		this.pion = pion;
	}

	/**
	 *
	 * @return le numero du joueur qui peut ramasser le drapeau
	 */
	public int getNumeroJoueur() {
		return numeroJoueur;
	}

	@Override
	public void dessiner(Graphics2D gr, Camera camera) {
		Rectangle vue;
		if (camera != null) {
			vue = camera.getRectangle();
		} else {
			vue = new Rectangle(0, 0, 0, 0);
		}
		if (maCase != null) {
			gr.drawImage(imageCase, null, maCase.getX() * Plateau.TAILLE_CASE - vue.x, maCase.getY() * Plateau.TAILLE_CASE - vue.y);
		} else if (pion != null) {
			gr.drawImage(imagePion, null, pion.getX() * Plateau.TAILLE_CASE - vue.x, pion.getY() * Plateau.TAILLE_CASE - vue.y);
		}
	}

	/**
	 *
	 * @return la copie du drapeau
	 */
	public Drapeau copier() {
		return new Drapeau(numeroJoueur);
	}
}
